/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.mala.view;

import br.jm.mala.entity.CategoriaGrupo;
import br.jm.mala.lazyModel.GenericLazyDataModel;
import br.jm.mala.service.CategoriaGrupoService;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.model.LazyDataModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 *
 * @author joao
 */
@Component("categoriaGrupoView")
@Scope("view")
public class CategoriaGrupoView implements Serializable {

    private static final long serialVersionUID = 233067529147824573L;

    private final CategoriaGrupoService categoriaGrupoService;
    private LazyDataModel<CategoriaGrupo> categoriaGrupoLazy;
    private CategoriaGrupo selectedCategoriaGrupo;
    private FacesMessage msg;

    @Autowired
    public CategoriaGrupoView(CategoriaGrupoService categoriaGrupoService) {
        this.categoriaGrupoService = categoriaGrupoService;
        categoriaGrupoLazy = new GenericLazyDataModel(categoriaGrupoService, null, null, "CategoriaGrupo");

        selectedCategoriaGrupo = new CategoriaGrupo();
        MenuView.salvar = true;
    }

    public LazyDataModel<CategoriaGrupo> getCategoriaGrupoLazy() {
        return categoriaGrupoLazy;
    }

    public void setCategoriaGrupoLazy(LazyDataModel<CategoriaGrupo> categoriaGrupoLazy) {
        this.categoriaGrupoLazy = categoriaGrupoLazy;
    }

    public CategoriaGrupo getSelectedCategoriaGrupo() {
        return selectedCategoriaGrupo;
    }

    public void setSelectedCategoriaGrupo(CategoriaGrupo selectedCategoriaGrupo) {
        this.selectedCategoriaGrupo = selectedCategoriaGrupo;
    }

    public void preparaInserir(ActionEvent event) {
        MenuView.salvar = true;
        this.selectedCategoriaGrupo = new CategoriaGrupo();
    }

    public void inserir(ActionEvent actionEvent) {
        msg = null;

        try {
            this.selectedCategoriaGrupo.setIdGrupo(null);
            this.categoriaGrupoService.create(selectedCategoriaGrupo);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Grupo Inserido com Sucesso", this.selectedCategoriaGrupo.getDscGrupo());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir", this.selectedCategoriaGrupo.getDscGrupo());
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        msg = null;

        try {
            this.categoriaGrupoService.edit(selectedCategoriaGrupo);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Grupo Alterado com Sucesso", this.selectedCategoriaGrupo.getDscGrupo());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar", this.selectedCategoriaGrupo.getDscGrupo());
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        msg = null;

        try {
            this.categoriaGrupoService.destroy(selectedCategoriaGrupo);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Grupo Excluido com Sucesso", this.selectedCategoriaGrupo.getDscGrupo());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + this.selectedCategoriaGrupo.getDscGrupo(), "GRUPO DA CATEGORIA SENDO UTILIZADO EM ALGUM PROCESSO!");
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }
}
